\begin{section}{Desarrollo}

\begin{subsection}{Primeras incursiones al Ataque}
 \par
 Las primeras ideas que se tuvieron para el trabajo práctico se dividieron en dos partes: primero las ideas de ataque y segundo las ideas de defensa.
 \paragraph{} 
 Las primeras aproximaciones que se tuvieron respecto al ataque fue tratar de triangular la posición del enemigo utilizando el rango brindado por las normas matriciales. Esto se debe a que utilizando la matriz provista por el equipo contrario, se calculan tanto la norma infinito como la norma uno. De esta forma estableciendo un rango al que pertenece la posición del contrincante. Por otro lado, se pensó en guardar en un archivo auxiliar la información de los disparos realizados con un valor de peso mostrando cuan efectivo fue dicho tiro.
 \par
 Por otro lado, las primeras ideas que se tuvieron respecto a la defensa fue generar una matriz que le genere complicaciones al equipo contrario para calcular su inversa. Para lograrlo se busca una matriz con un número de condicion grande. 
\end{subsection}

\begin{subsection}{De la ideas a la Implementación}
 \par
 Para pasar a la implementación se decidieron hacer algunas modificaciones a las ideas propuestas inicialmente.
 \par
 En el caso de las tácticas de ataque, se decidió no realizar la técnica de triangulación de la posición utilizando las normas matriciales uno e infinito, dado que se supone que el equipo contrario va a tender a crear una matriz con una norma grande. Por este motivo, no sería efectivo tener en cuenta la norma ya que al ser grande no aportaría mucha información util. 
 %~ En cambio, en cuanto a la idea de guardar los disparos realizados con un peso determinando cuan efectivo fue el disparo, se implementó. El peso se lo define el número de condición de la matriz utilizada para disparar. 
 \par
 Por otro lado, para generar el disparo se decidi\'o generar la matriz de Hilbert dado que es una matriz conocida y que cumple las propiedades deseadas para el disparo, ya que es inversible y a su vez es dificil de invertir, entre otras propiedades.
 $$ Hilbert_{(i,j)} = \frac{1}{i+j-1}$$ 
 
 \par
 Al generar esta matríz se tuvo en cuenta que en la definición los subíndices comienzan desde $1$ y no desde $0$, por lo tanto, la matríz quedaría definida como 
 $$ Hilbert_{(i,j)} = \frac{1}{(i+1)+(j+1)-1} = \frac{1}{i+j+1}$$ 
 
 %~ \par 
 %~ En el caso de las técnicas defensivas se armó una función que busca generar una matriz cuyo número de condición sea mayor a mil y que sea inversible. El objeto de esta condición es dificultar al equipo contrario al calcular la matriz inversa.
 \par
 En general sobre la implementaci\'on se decidi\'o realizar un c\'odigo modularizado para facilitar la comprensión y utilización. Los m\'odulos creados son Defs.h, Vector, Matriz y Sistemas. 
 
 \begin{itemize}
	\item \textbf{defs.h} se encuentran las definiciones básicas utilizadas y se incluyen las bibliotecas a utilizar
	\item \textbf{vector} se pueden encontrar todas las operaciones que involucran uno o m\'as vectores, como por ejemplo c\'alculo de normas vectoriales y producto interno.
	\item \textbf{matriz} se hallan aquellas operaciones que utilizan una o m\'as matrices, por ejemplo normas matriciales y multiplicación entre matrices.
	\item \textbf{sistemas} se encuentran las operaciones que involucran vectores y matrices, tales como descomposici\'on LU, descomposición QR, descomposicion LU con pivoteo escalado, multiplicación de una matríz por un vector, resolución de sistemas de ecuaciones lineales, obtención de la inversa de una matríz.
 \end{itemize} 

 \par
 En s\'i, el programa realizado consiste en primero verificar si se está en el primer tiro o no. Si es el primer turno simplemente se genera una matriz de disparo con las condiciones planteadas previamente y se dispara. La posición del enemigo se genera de manera aleatoria ya que no se tiene información previa.
 \paragraph{}
 En cambio, si se est\'a en otro turno, primero se leen los datos del disparo previo del enemigo y se utilizan para intentar resolver la posici\'on del mismo. Para esto se cuentan con varios algoritmos para resolver la matriz inversa del equipo contrario. Dado que se realizaron diversos algoritmos para encontrar la posici\'on enemiga, como por ejemplo descomposici\'on QR y descomposici\'on LU con pivoteo escalado se decidi\'o aprovecharlos para encontrar una mejor aproximaci\'on de la posici\'on enemiga, para esto se realiza un promedio entre las posiciones encontradas. Luego, una vez calculada la aproximaci\'on de la posici\'on enemiga se genera una matriz teniendo en cuenta dicha posci\'on, pero que sigue cumpliendo que sea inversible y posea un n\'umero de condici\'on elevado. 

\end{subsection}

\end{section}
